home *** CD-ROM | disk | FTP | other *** search
- unit Unit1;
- interface
- uses
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- StdCtrls;
-
- const
- _Caption = 'The Delphi Magazine #48 - Dynamic Game of Memory: %d';
-
- type
- TArrayArrayButton = Array of Array of TButton;
-
- TForm1 = class(TForm)
- procedure FormCreate(Sender: TObject);
- private
- { Private declarations }
- Turns: Integer;
- procedure Shuffle(Button: TArrayArrayButton);
- procedure FirstButtonClick(Sender: TObject);
- procedure SecondButtonClick(Sender: TObject);
- public
- { Public declarations }
- procedure CreateBoard(X,Y: Integer);
- end;
-
- var
- Form1: TForm1;
-
- implementation
- {$R *.DFM}
-
- procedure TForm1.FormCreate(Sender: TObject);
- begin
- Randomize;
- Turns := 0;
- CreateBoard(6,4)
- end;
-
- procedure TForm1.CreateBoard(X, Y: Integer);
- var
- i,j: Integer;
- Button: TArrayArrayButton;
- begin
- SetLength(Button, X);
- for i:=0 to Pred(X) do
- begin
- SetLength(Button[i], Y);
- for j:=0 to Pred(Y) do
- begin
- Button[i,j] := TButton.Create(Self);
- Button[i,j].Parent := Self;
- Button[i,j].Left := 6 + (600 div X) * i;
- Button[i,j].Width := (600 div X) - 8;
- Button[i,j].Top := 6 + (400 div Y) * j;
- Button[i,j].Height := (400 div Y) - 8;
- Button[i,j].Tag := 1 + (j * X + i) div 2;
- Button[i,j].Caption := '?';
- Button[i,j].OnClick := FirstButtonClick
- end
- end;
- Shuffle(Button)
- end;
-
- procedure TForm1.Shuffle(Button: TArrayArrayButton);
- var
- i: Integer;
- X,Y: Integer;
- X1,X2,Y1,Y2: Integer;
- begin
- X := Length(Button);
- Y := Length(Button[0]);
- for i:=1 to 1001 do
- begin
- X1 := Random(X);
- X2 := Random(X);
- Y1 := Random(Y);
- Y2 := Random(Y);
- Tag := Button[X1,Y1].Tag;
- Button[X1,Y1].Tag := Button[X2,Y2].Tag;
- Button[X2,Y2].Tag := Tag
- end
- end;
-
- procedure TForm1.FirstButtonClick(Sender: TObject);
- var
- i: Integer;
- begin
- Tag := (Sender AS TButton).Tag;
- (Sender AS TButton).Caption := IntToStr(Tag);
- for i:=0 to Pred(ComponentCount) do
- if Components[i] IS TButton then
- if (Components[i] AS TButton).Enabled then
- (Components[i] AS TButton).OnClick := SecondButtonClick
- { assign new event handler }
- end;
-
- procedure TForm1.SecondButtonClick(Sender: TObject);
- var
- i: Integer;
- begin
- Inc(Turns);
- Caption := Format(_Caption,[Turns]);
- (Sender AS TButton).Caption := IntToStr((Sender AS TButton).Tag);
- if (Sender AS TButton).Tag = Tag then { the same }
- begin
- (Sender AS TButton).Enabled := False;
- for i:=0 to Pred(ComponentCount) do
- if Components[i] IS TButton then
- if (Components[i] AS TButton).Tag = Tag then
- (Components[i] AS TButton).Enabled := False
- end
- else { not the same; hide again }
- begin
- Sleep(1000);
- for i:=0 to Pred(ComponentCount) do
- if Components[i] IS TButton then
- if (Components[i] AS TButton).Enabled and
- ((Components[i] AS TButton).Caption <> '?') then
- (Components[i] AS TButton).Caption := '?'
- end;
- for i:=0 to Pred(ComponentCount) do
- if Components[i] IS TButton then
- if (Components[i] AS TButton).Enabled then
- (Components[i] AS TButton).OnClick := FirstButtonClick
- { assign new event handler }
- end;
-
- end.
-